const {ccclass, property} = cc._decorator;

@ccclass
export default abstract class basePanleScript extends cc.Component {

    /**
     * @param 初始化时调用一次
     */
    public abstract onLoaded( param:any):void

    /**
     * @param 每次进入的时候调用一次
     */
    public abstract onEnter( param:any):void

    /**
     * @param 刷新（预留）
     */
    public abstract onRefresh( param:any):void

    /**
     * 快速获取某个节点或其组件
     * @param str 节点名称
     * @param com 组件
     */
    _get_(str:string,com?:any):any{
        // if(this.node.name==str){
        //     return this.node;
        // }
        // var n=this.getNodeChild(str,this.node)
        // // if(com){
        // //     return n.getComponent(com);
        // // }else{
        //     return n;
        // // }
        let ndSets:cc.Node[]=[];
        if(!this.node){
            console.error("发生未知错误(可能发生了异步)",this.node)
            return;
        }
        console.warn("~~~~节点~~~~~",this.node)
        for(let o of this.node.children){
            ndSets.push(o);
        }
        let nd = this.searchInChildren(ndSets,str)
        if(!nd) console.error("没有这个名字的组件：",str)
        return com? nd.getComponent(com):nd
    }
    searchInChildren(sets:Array<cc.Node>,str:string){
        let newSets:cc.Node[]=[];
        for(let o of sets){
            if(o.name == str) return o
            for(let _o of o.children){
                newSets.push(_o)
            }
        }
        if( newSets.length == 0) return null
        return this.searchInChildren(newSets,str);
    }
    getNodeChild(str:string,node:cc.Node){
        for(let i in node.children){
            if(node.children[i].name==str){
                return node.children[i];
            }else{
                this.getNodeChild(str,node.children[i])
            }
        }
    }

    /**
     * 漂浮提示
     * @param str 
     */
    showToast(str:string){
        var self=this;
        cc.loader.loadRes("prefab/toastTips", function (err, prefab) {
            var newNode = cc.instantiate(prefab);
            newNode.getChildByName("label").getComponent(cc.Label).string=str;
            if(newNode.getChildByName("label").width>400){
                newNode.getChildByName("bg").width=newNode.getChildByName("label").width;
            }else{
                newNode.getChildByName("bg").width=400;
            }
            self.node.addChild(newNode);
            newNode.runAction(cc.moveBy(0.5,0,45));
            self.scheduleOnce(function(){
                newNode.destroy();
            },1);
        });
    }
    
}
